package com.minimalist.lindi.service;

import com.minimalist.common.config.mybatis.bo.PageResp;
import com.minimalist.common.entity.lindi.po.LindiIndex;
import com.minimalist.common.entity.lindi.vo.index.LindiIndexQueryVO;
import com.minimalist.common.entity.lindi.vo.index.LindiIndexVO;
import com.mybatisflex.core.service.IService;
import jakarta.validation.constraints.NotNull;

import java.util.Map;

/**
 * 林地指标表 服务层。
 *
 * @author 11987
 * @since 2025-04-16
 */
public interface LindiIndexService extends IService<LindiIndex>{

    /**
     * 新增指标。
     *
     * @param indexVO 指标VO对象。
     */
    void addIndex(LindiIndexVO indexVO);

    /**
     * 删除指标。
     *
     * @param indexId 指标ID。
     */
    void deleteIndexByIndexId(@NotNull(message = "指标ID不能为空") Long indexId);

    /**
     * 更新指标。
     *
     * @param indexVO 指标VO对象。
     */
    void updateIndexByIndexId(LindiIndexVO indexVO);

    /**
     * 查询指标分页列表。
     *
     * @param queryVO 查询条件。
     * @return 分页列表。
     */
    PageResp<LindiIndexVO> getPageIndexList(LindiIndexQueryVO queryVO);

    /***
     * 根据指标ID查询指标。
     * @param indexId 指标ID。
     * @return 指标VO对象。
     */
    LindiIndexVO getIndexByIndexId(Long indexId);

    /**
     * 初始化镇街指标。
     */
    void initTownIndex();

    /**
     * 市储备库指标统计数据。
     *
     * @return 市储备库指标统计数据。
     */
    Map<String, Object> getStatistics();

    /**
     * 获取可交易的镇街名称列表。
     * 返回格式为"镇街名称+(可交易亩数)"的记录列表
     * 只返回可交易亩数大于0的镇街
     *
     * @return 可交易镇街名称列表
     */
    java.util.List<String> getEnableTradeTownNameList();
}
